﻿#ifndef SerialTools_H
#define SerialTools_H

#include <QDebug>
#include <QObject>
#include <QSerialPort>
#include <QTimer>
#include <QVariantMap>
#include <string>
#include "RobotCmdNode.hpp"
#include <memory>

class SerialTools : public QObject {
    Q_OBJECT
public:
    explicit SerialTools(int argc, char** argv, QObject* parent = nullptr);
    ~SerialTools();

public:
    void setCom(const std::string& comName);

    void closeCom();

    void call_cmd(const std::string& cmdName);

private slots:

    void openCom();

    void onReadReady();

    // void reset();

    // void pinch();

    // void loose();

    // void stop();

    // void startPeel(int nCm = 10);

    // void stopPeel();

    // 剥皮器
    void bpq_allReset();
    void bpq_jiaJin();
    void bpq_songKai();
    void bpq_stop();
    void bpq_startBoPi();
    void bpq_stopBoPi();

    // 夹钳
    void jq_stop2song();
    void jq_song2stop();
    void jq_stop2jin();
    void jq_jin2stop();

    // 扳手
    void bs_fanzhuan();
    void bs_zhenzhuan();
    void bs_stop();

    // 切刀
    void qd_zhenzhuan();
    void qd_stop();


    void onTimerExec();

private:
    void rosSpinThread();
    void write(unsigned char* data, int len);
    void initBas();

    void printBa(const QByteArray&& ba);

private:
    QSerialPort* m_com;
    int argc_;
    char** argv_;
    std::shared_ptr<RobotCmdNode> m_robotCmdNode;
    std::thread m_ros_spin_thread;

    // for 扳手和切刀
    QTimer* m_timerExec;

    // for 剥皮器
    QByteArray m_baAllReset;
    QByteArray m_baJiaJin;
    QByteArray m_baSongKai;
    QByteArray m_baStop;
    QByteArray m_baStartBoPi;
    QByteArray m_baStopBoPi;

    // for 夹钳
    QByteArray m_baStop2Song;
    QByteArray m_baStop2Jin;
    QByteArray m_baSong2Stop;
    QByteArray m_baJin2Stop;



    // for 扳手
    QByteArray m_baStop2Fanzhuan;
    QByteArray m_baStop2Zhengzhuan;

    // for 切刀
    QByteArray m_baStop2Zhengzhuan_qiedao;

    QByteArray m_baQieDao_BanShou;
};

#endif  // SerialTools_H
